package com.automannn.codeGenerator.core.parser.node;

import com.automannn.codeGenerator.core.parser.node.block.ASTBlock;
import com.automannn.codeGenerator.core.parser.node.block.ASTExpression;
import com.automannn.codeGenerator.core.parser.node.middle.directive.ASTSetDirective;
import com.automannn.codeGenerator.core.parser.node.middle.executor.ASTReference;
import com.automannn.codeGenerator.core.parser.node.ext.ASTDirective;

import com.automannn.codeGenerator.core.parser.node.middle.control.ASTElseIfStatement;
import com.automannn.codeGenerator.core.parser.node.middle.control.ASTElseStatement;
import com.automannn.codeGenerator.core.parser.node.middle.control.ASTIfStatement;
import com.automannn.codeGenerator.core.parser.node.middle.executor.ASTIdentifier;
import com.automannn.codeGenerator.core.parser.node.middle.executor.ASTMethod;
import com.automannn.codeGenerator.core.parser.node.middle.executor.ASTWord;
import com.automannn.codeGenerator.core.parser.node.middle.logic.ASTAndNode;
import com.automannn.codeGenerator.core.parser.node.middle.logic.ASTNotNode;
import com.automannn.codeGenerator.core.parser.node.middle.logic.ASTOrNode;

import com.automannn.codeGenerator.core.parser.node.middle.ASTAssignment;

import com.automannn.codeGenerator.core.parser.node.leaf.*;
import com.automannn.codeGenerator.core.parser.node.middle.math.*;
import com.automannn.codeGenerator.core.parser.node.middle.type.*;

/**
 * @author chenkh
 * @time 2020/12/7 10:44
 */
public interface ParserVisitor {

    /*xxx: 访问 SimpleNode 节点,返回当前节点*/
    public Object visit(SimpleNode node, Object data);

    /*xxx: 访问Process节点*/
    public Object visit(ASTprocess node, Object data);

    /*xxx: 访问 EscapedDirective节点*/
    public Object visit(ASTEscapedDirective node, Object data);

    /*xxx: 访问 Escape 节点*/
    public Object visit(ASTEscape node, Object data);

    /*xxx: 访问comment节点*/
    public Object visit(ASTComment node, Object data);

    /*xxx: 访问 FloatingPointLiteral节点*/
    public Object visit(ASTFloatingPointLiteral node, Object data);

    /*xxx: 访问IntegerLiteral节点*/
    public Object visit(ASTIntegerLiteral node, Object data);

    /*xxx: 访问 stringLiteral 节点*/
    public Object visit(ASTStringLiteral node, Object data);

    /*xxx: 访问 identifier节点*/
    public Object visit(ASTIdentifier node, Object data);

    /*xxx: 访问word节点*/
    public Object visit(ASTWord node, Object data);

    /*xxx: 访问directive节点*/
    public Object visit(ASTDirective node, Object data);

    /*xxx: 访问 block节点*/
    public Object visit(ASTBlock node, Object data);

    /*xxx: 访问map节点*/
    public Object visit(ASTMap node, Object data);

    /*xxx: 访问objectArray节点*/
    public Object visit(ASTObjectArray node, Object data);

    /*xxx: 访问 integerRange节点*/
    public Object visit(ASTIntegerRange node, Object data);

    /*xxx: 访问 method节点*/
    public Object visit(ASTMethod node, Object data);

    /*xxx: 访问 reference节点*/
    public Object visit(ASTReference node, Object data);

    /*xxx: 访问 true节点*/
    public Object visit(ASTTrue node, Object data);

    /*xxx: 访问 false 节点*/
    public Object visit(ASTFalse node, Object data);

    /*xxx: 访问 text 节点*/
    public Object visit(ASTText node, Object data);

    /*xxx: 访问 statement节点*/
    public Object visit(ASTIfStatement node, Object data);

    /*xxx: 访问 elseStatement节点*/
    public Object visit(ASTElseStatement node, Object data);

    /*xxx: 访问elseIfStatement节点*/
    public Object visit(ASTElseIfStatement node, Object data);

    /*xxx： 访问 setDirective节点*/
    public Object visit(ASTSetDirective node, Object data);

    /*xxx: 访问 stop节点*/
    public Object visit(ASTStop node, Object data);

    /*xxx: 访问 expression节点*/
    public Object visit(ASTExpression node, Object data);

    /*xxx: 访问 assignment 节点*/
    public Object visit(ASTAssignment node, Object data);

    /*xxx: 访问 or节点*/
    public Object visit(ASTOrNode node, Object data);

    /*xxx: 访问and节点*/
    public Object visit(ASTAndNode node, Object data);

    /*xxx: 访问 eq节点*/
    public Object visit(ASTEQNode node, Object data);

    /*xxx: 访问NE节点*/
    public Object visit(ASTNENode node, Object data);

    /*xxx: 访问 LT 节点*/
    public Object visit(ASTLTNode node, Object data);

    /*xxx: 访问 GT 节点*/
    public Object visit(ASTGTNode node, Object data);

    /*xxx: 访问 LE 节点*/
    public Object visit(ASTLENode node, Object data);

    /*xxx: 访问 GE 节点*/
    public Object visit(ASTGENode node, Object data);

    /*xxx: 访问 Add 节点*/
    public Object visit(ASTAddNode node, Object data);

    /*xxx: 访问 subtract节点*/
    public Object visit(ASTSubtractNode node, Object data);

    /*xxx: 访问 mul 节点*/
    public Object visit(ASTMulNode node, Object data);

    /*xxx: 访问 div 节点*/
    public Object visit(ASTDivNode node, Object data);

    /*xxx: 访问 mod 节点*/
    public Object visit(ASTModNode node, Object data);

    /*xxx: 访问 not 节点*/
    public Object visit(ASTNotNode node, Object data);
}
